<?php

namespace yida\controllers;

use Yii;
use yii\filters\auth\HttpHeaderAuth;
use yii\web\Controller;

/**
 * 宜搭项目认证类控制器 需要toten授权的接口的控制器都要继承此类
 * Class AuthController
 * @package api\controllers
 */
class ListenerAuthController extends Controller
{
    // 错误码 令牌无效
    const ERR_CODE_AUTHORIZATION_INVALID = 3002;
    // 错误码 未登录
    const ERR_CODE_NOT_LOGGED_IN = 3001;
    /**
     * 在请求动作前检测会员登录状态
     * @param mixed $action 当前请求的动作
     * @return bool
     * @throws \yii\web\BadRequestHttpException
     */
    public function beforeAction($action)
    {
        $res = parent::beforeAction($action);

        // 检测授权状态 如果未授权 取出请求标头 使用标头保存的X-Api-Key鉴权
        $auth = new HttpHeaderAuth();
        // 获取PHP请求标头：X-Api-Key
        $authHeader = Yii::$app->getRequest()->getHeaders()->get($auth->header);
        // 如果X-Api-Key标头不为空，尝试鉴权
        if ($authHeader && Yii::$app->crop::findIdentityByAccessToken($authHeader, get_class($auth))) {
            // 登录成功
            return true;
        }
        // 未授权
        Yii::$app->getResponse()->data = Yii::$app->api->error(
            static::ERR_CODE_AUTHORIZATION_INVALID,
            Yii::t('common', 'The Authorization is invalid.')
        );
        Yii::$app->getResponse()->send();
        // 禁止未授权访问接口
        return false;
    }
}
